From 5d2acb1fe955ee65723a1ec2c940b3836d65ca7a Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 24 Jul 2012 16:22:06 +0200 Subject: [PATCH] stylecontext: Split out a function for simplicity --- gtk/gtkstylecontext.c | 63 ++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index a4f3e2c905..281be0f8f9 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -3027,6 +3027,43 @@ gtk_style_context_start_animations (GtkStyleContext *context, gtk_style_context_start_animating (context); } +static gboolean +gtk_style_context_needs_full_revalidate (GtkStyleContext *context, + GtkCssChange change) +{ + GtkStyleContextPrivate *priv = context->priv; + + /* Try to avoid invalidating if we can */ + if (change & GTK_STYLE_CONTEXT_RADICAL_CHANGE) + { + priv->relevant_changes = GTK_CSS_CHANGE_ANY; + } + else + { + if (priv->relevant_changes == GTK_CSS_CHANGE_ANY) + { + GtkWidgetPath *path; + GtkCssMatcher matcher; + + path = create_query_path (context); + if (_gtk_css_matcher_init (&matcher, path, priv->info->state_flags)) + priv->relevant_changes = _gtk_style_provider_private_get_change (GTK_STYLE_PROVIDER_PRIVATE (priv->cascade), + &matcher); + else + priv->relevant_changes = 0; + + priv->relevant_changes &= ~GTK_STYLE_CONTEXT_RADICAL_CHANGE; + + gtk_widget_path_unref (path); + } + } + + if (priv->relevant_changes & change) + return TRUE; + else + return FALSE; +} + void _gtk_style_context_validate (GtkStyleContext *context, gint64 timestamp, @@ -3065,31 +3102,7 @@ _gtk_style_context_validate (GtkStyleContext *context, gtk_style_context_set_invalid (context, FALSE); /* Try to avoid invalidating if we can */ - if (change & GTK_STYLE_CONTEXT_RADICAL_CHANGE) - { - priv->relevant_changes = GTK_CSS_CHANGE_ANY; - } - else - { - if (priv->relevant_changes == GTK_CSS_CHANGE_ANY) - { - GtkWidgetPath *path; - GtkCssMatcher matcher; - - path = create_query_path (context); - if (_gtk_css_matcher_init (&matcher, path, priv->info->state_flags)) - priv->relevant_changes = _gtk_style_provider_private_get_change (GTK_STYLE_PROVIDER_PRIVATE (priv->cascade), - &matcher); - else - priv->relevant_changes = 0; - - priv->relevant_changes &= ~GTK_STYLE_CONTEXT_RADICAL_CHANGE; - - gtk_widget_path_unref (path); - } - } - - if (priv->relevant_changes & change) + if (gtk_style_context_needs_full_revalidate (context, change)) { GtkStyleInfo *info = priv->info; StyleData *current; -- 2.30.2